package com.game.centerserver.service;

import com.game.centerserver.common.Result;
import com.game.centerserver.infrastructure.entity.DstClusterIni;
import com.game.centerserver.infrastructure.entity.DstServerIni;

import java.io.File;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * 生成存档
 * @Author: tian
 * @Date: 2024/11/10/18:17
 * @Description:
 */
public interface GenerateArchive {

    /**
     * 根据archiveID生成 archiveID/Master archiveID/Caves目录
     * @param archiveID
     * @return 存档目录地址
     */
    String generateArchiveDirection(String uid, String archiveID);

    /**
     * 清除存档的配置文件
     * @param archivePath
     * @return 成功返回true
     */
    boolean clearConfigFile(File archivePath);


    /**
     * 向存档文件夹中生成配置文件
     * @param archivePath
     * @return
     */
    boolean generateConfigsToArchiveDirection(String archiveId, File archivePath);

    /**
     * 根据archiveId生成完整的存档
     * @param archiceId
     * @return
     */
    Result generateCompleteArchive(String archiceId,List<String> modList);

    /**
     * 生成cluster.ini文件
     * @return
     */
    Boolean generateClusterIniFile(String archiveId, File targetFile);

    /**
     * 生成server.ini文件
     * @return
     */
    Boolean generateServerIniFile(DstServerIni dstServerIni, File targetFile);


    /**
     * 生成cluster_token.txt文件
     * @return
     */
    Boolean generateClusterTokenFile(String archiveId, File targetFile);

    /**
     * 生成lua脚本
     * @param isCaves ture表示要生成洞穴的脚本，false表示要生成地面的脚本
     * @param targetFile
     * @return
     */
    Boolean generateWorldgenoverrideFile(Boolean isCaves, File targetFile);

    /**
     * 生成mod的配置文件
     * @param modList
     * @return
     */
    Boolean generateModOverridesFile(List<String> modList);

    /**
     * 读取cluster.ini文件
     * @param clusterIniFile
     * @return
     */
    DstClusterIni readClusterIni(File clusterIniFile);

    /**
     * 读取server.ini文件
     * @param serverIniFile
     * @return
     */
    DstServerIni readServerIni(File serverIniFile);

    /**
     * 将DSTCluster类写到cluster.ini文件中
     * @param dstCluster
     * @param targetFile
     * @return
     */
    Boolean writerDSTClusterToIni(DstClusterIni dstCluster,File targetFile);

    /**
     * 将DSTServer类写到server.ini文件中
     * @param dstServer
     * @param targetFile
     * @return
     */
    Boolean writerDSTServerToIni(DstServerIni dstServer,File targetFile);


    /**
     * 往ini文件中添加节
     * @param iniFile
     * @param sectionName
     * @return
     */
    Boolean addSection(File iniFile,String sectionName);

    /**
     * 往ini文件中添加或修改字段
     * @param iniFile
     * @param sectionName
     * @param fieldName
     * @param fieldValue
     * @return
     */
    Boolean addOrUpdateField(File iniFile,String sectionName,String fieldName,String fieldValue);

    /**
     * 删除ini文件节中的字段
     * @param iniFile
     * @param sectionName
     * @param fieldName
     * @return
     */
    Boolean deleteField(File iniFile,String sectionName,String fieldName);

    /**
     * 删除ini文件的节
     * @param iniFile
     * @param sectionName
     * @return
     */
    Boolean deleteSection(File iniFile,String sectionName);
}
